package com.mz.nhoz.util;

public abstract class ValueComparator<BaseClass> {
	protected Class<BaseClass> baseType;

	/**
	 * Compara dos valores de un tipo determinado. Retorna true si son iguales.
	 * 
	 * @param t1
	 *            - primer valor a comparar.
	 * @param t2
	 *            - segundo valor a comparar.
	 * @return True en caso que sean iguales. False en caso contrario.
	 */
	public boolean valuesAreEqual(Object t1, Object t2) {
		// si ambos son null retorna true
		if (t1 == null && t2 == null) {
			return true;
		}

		// si uno de los dos es null (el otro no lo es por la condicion
		// anterior) retorna false
		if (t1 == null || t2 == null) {
			return false;
		}

		if (t1.getClass() != t2.getClass() || t1.getClass() != baseType) {
			return false;
		}

		return compareValue(t1, t2);
	}

	protected abstract boolean compareValue(Object t1, Object t2);
}// ValueComparator
